package javawdw.util;

import java.util.concurrent.LinkedBlockingQueue;

/**
 * 模拟队列
 * 
 * @author David
 * 
 * @param <E>
 *            队列中允许出入的对象泛型
 */
public class Queue<E> {
	private LinkedBlockingQueue<E> buffer;

	/**
	 * 默认构造器
	 */
	public Queue() {
		this.buffer = new LinkedBlockingQueue<E>();
	}

	/**
	 * 取出一个对象
	 * 
	 * @return 返回取到的对象，队列为空时进入空闲状态等待队列有对象可以取出
	 */
	public final E take() {
		E result = null;
		try {
			result = this.buffer.take();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 向队列中插入一个对象
	 * 
	 * @param instance
	 *            要插入的对象
	 */
	public final void put(E instance) {
		try {
			this.buffer.put(instance);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 统计队列中对象个数
	 * 
	 * @return
	 */
	public final int size() {
		return this.buffer.size();
	}

	/**
	 * 清空队列
	 */
	public final void clear() {
		this.buffer.clear();
	}
}